package InnerClass;

/**
 * @description:
 * @Author yyp
 * @time
 */
public class LocalInnerClass {
    public static void main(String[] args) {
        LocalInnerClassA a = new LocalInnerClassA();
        a.m1();
        System.out.println("外部类的哈希地址"+a);
    }
}
class LocalInnerClassA{
    private int n1 = 100;
    private void m2(){
        System.out.println("Outer02 m2()");
    }
    public void m1() {
        /**
         * 局部内部类时定义在外部类的局部位置，通常在方法内
         * 不能添加访问修饰符，只能用final修饰，其余修饰符都没有自动补全
         */
        final class Inner01 {//局部内部类，这两个括号内就是作用域
            int n1 = 10;
            /**
             * 可以直接访问外部类的所有成员包含私有的
             */
            String name = "yyp";//yyp是局部变量，局部内部类的作用域也和局部变量一样
            public void m1() {//局部内部类的方法命名可以跟方法相同
                System.out.println("默认访问局部内部类n1 = " + n1);
                m2();
                System.out.println("类名.this.成员名访问外部类成员n1 = "+LocalInnerClassA.this.n1);
                System.out.println("类名.this的哈希地址"+LocalInnerClassA.this);
            }
        }
        /**
         * 必须在 局部内部类的作用域内 创建局部内部类 来访问内部类的成员
         */
        Inner01 inner01 = new Inner01();
        inner01.m1();
    }
    {class Inner01{ }}
}
/**
 * class Inner01{ }
 * 局部内部类，不会和其他的外部类有命名冲突
 */
class A extends LocalInnerClassA{ }
